7440. Просто

 

Задана строка s. Определите, сможет ли она стать палиндромом после удаления в точности одного символа.

 

Вход. Одна строка s (1 ≤ длина(s) ≤ 10000).

 

Выход. Выведите yes, если после удаления в точности одного символа строку s можно преобразовать в палиндром, иначе вывести no. В случае ответа yes вывести во второй строке результирующий палиндром. Если существует несколько решений, вывести любое.

 

Пример входа 1

Пример выхода 1

abccxba

yes

abccba

 

 

Пример входа 2

Пример выхода 2

dsfsfasf

no

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

Переберем все буквы, поочередно каждую из них удаляем из строки. Если хотя бы одна из полученных строк будет палиндромом, то ответ утвердительный.

 

Реализация алгоритма

Объявим рабочие строки.

 

string s, t;

 

Функция palindrom проверяет, является ли строка s палиндромом. Строка является палиндромом, если после обращения она равна самой себе.

 

int palindrom(string s)

{

  string sr = s;

  reverse(sr.begin(),sr.end());

  return s == sr;

}

 

Читаем входную строку.

 

cin >> s;

flag = 0;

 

Перебираем символы в строке s.

 

for (i = 0; i < s.size(); i++)

{

 

Удаляем из строки s i-ый символ, получаем строку t. Если t является палиндромом, то устанавливаем flag = 1 и завершаем обработку.

 

  t = s.substr(0,i) + s.substr(i+1);

  if (palindrom(t))

  {

    flag = 1;

    break;

  }

}

 

Выводим ответ в зависимости от значения переменной flag.

 

if (flag == 1)

  cout << "yes\n" << t << endl;

else

  cout << "no" << endl;